[file name]: Git Hooks.html [file content begin] Git Hooks - Jassif Team Institution

Git Hooks

स्वचालित स्क्रिप्ट्स - विशिष्ट Git घटनाओं पर स्वचालित रूप से चलने वाली

Git Hooks क्या हैं?

Git hooks ऐसी स्क्रिप्ट्स हैं जो विशिष्ट Git घटनाओं के घटित होने पर स्वचालित रूप से चलती हैं, जैसे कि कमिट करना या कोड को पुश करना।

Hooks का उपयोग क्यों करें?

Hooks दोहराए जाने वाले कार्यों को स्वचालित करने, कोडिंग मानकों को लागू करने और समस्याओं को जल्दी पहचानने में मदद करते हैं।

टेस्ट चलाएं

प्रत्येक कमिट या पुश से पहले टेस्ट चलाएं

कोड स्टाइल जांचें

कोड स्टाइल की स्वचालित रूप से जांच करें

खराब कमिट संदेशों को रोकें

अनुचित कमिट संदेशों को रोकें

सभी के लिए नियम लागू करें

अपनी टीम में सभी के लिए नियम लागू करें

Hooks कहाँ होते हैं?

Hooks आपके रिपॉजिटरी के अंदर .git/hooks में संग्रहीत होते हैं।

डिफ़ॉल्ट रूप से, आप .sample में समाप्त होने वाली उदाहरण स्क्रिप्ट्स देखेंगे।

उदाहरण: उपलब्ध Hooks की सूची बनाएं

ls .git/hooks

एक Hook को कैसे सक्षम करें

एक hook को सक्षम करने के लिए, .sample एक्सटेंशन को हटाएं और स्क्रिप्ट को निष्पादन योग्य बनाएं।

उदाहरण के लिए, pre-commit को सक्षम करने के लिए:

उदाहरण: pre-commit Hook सक्षम करें (Linux/macOS)

mv .git/hooks/pre-commit.sample .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

Windows पर, फ़ाइल का नाम बदलकर pre-commit करें और सुनिश्चित करें कि यह आपके शेल द्वारा निष्पादित की जा सकती है (यदि आवश्यक हो तो .bat या .ps1 का उपयोग करें)।

Hooks के प्रकार

कई प्रकार के hooks हैं, लेकिन सबसे सामान्य हैं:

1

pre-commit Hook

pre-commit hook तब चलता है जब आप एक कमिट करने वाले होते हैं।

इसका उपयोग कोड स्टाइल जाँचने, टेस्ट चलाने, या कुछ गलत होने पर कमिट को रोकने के लिए किया जा सकता है।

उदाहरण: सरल pre-commit Hook

#!/bin/sh
# Stop commit if any .js file has "console.log"
grep -r 'console.log' *.js && {
  echo "Remove console.log before committing!"
  exit 1
}
2

commit-msg Hook

commit-msg hook कमिट संदेश की जाँच या संशोधन करता है।

उदाहरण के लिए, यह टिकट नंबर के बिना कमिट्स को रोक सकता है।

उदाहरण: commit-msg Hook

#!/bin/sh
# Block commit if message does not contain a ticket number
if ! grep -qE 'JIRA-[0-9]+' "$1"; then
  echo "Commit message must have a ticket number (e.g. JIRA-123)"
  exit 1
fi
3

pre-push Hook

pre-push hook तब चलता है जब आप कोड को रिमोट पर पुश करने वाले होते हैं।

कोड साझा करने से पहले टेस्ट या सत्यापन चलाने के लिए इसका उपयोग किया जा सकता है।

उदाहरण: pre-push Hook

#!/bin/sh
npm test || exit 1

सर्वर-साइड Hooks

कुछ hooks (जैसे pre-receive) Git सर्वर पर चलते हैं, आपके कंप्यूटर पर नहीं।

ये रिपॉजिटरी में पुश करने वाले सभी लोगों के लिए नियम लागू कर सकते हैं।

उदाहरण: pre-receive Hook

#!/bin/sh
# Block pushes to main branch
grep refs/heads/main || exit 1

कस्टम Hooks

किसी भी कस्टम स्क्रिप्ट को एक hook के रूप में लिखा जा सकता है।

इसे .git/hooks में रखें और इसे निष्पादन योग्य बनाएं।

उदाहरण: कस्टम Hook

#!/bin/sh
echo "Hello from my custom hook!"

डिबगिंग और सर्वोत्तम प्रथाएं

निष्पादन योग्य स्क्रिप्ट

सुनिश्चित करें कि आपकी hook स्क्रिप्ट निष्पादन योग्य है (chmod +x scriptname)

डिबगिंग

यह देखने के लिए echo स्टेटमेंट जोड़ें कि आपकी स्क्रिप्ट क्या कर रही है

एक्जिट कोड

एक्जिट कोड की जाँच करें: exit 0 सफलता, exit 1 विफलता

Windows समर्थन

Windows पर, यदि आवश्यक हो तो .bat या .ps1 स्क्रिप्ट्स का उपयोग करें

💡 Jassif Team सर्वोत्तम प्रथाएं

सरल और तेज़ रखें: hooks को सरल और तेज़ रखें - धीमे hooks आपके वर्कफ़्लो को धीमा कर देंगे

अपनी टीम के साथ साझा करें: उपयोगी hooks अपनी टीम के साथ साझा करें (लेकिन याद रखें: hooks डिफ़ॉल्ट रूप से संस्करण नियंत्रित नहीं होते हैं)

शुरुआती लोगों के लिए: पहले सरल hooks से शुरू करें, फिर अधिक जटिल पर जाएं

महत्वपूर्ण नोट

📝 Jassif Team नोट

Hooks टेस्ट या कोड विश्लेषण जैसे चेक को स्वचालित करने और टीम मानकों को लागू करने के लिए शक्तिशाली हैं।

क्लाइंट-साइड hooks आपके कंप्यूटर पर चलते हैं। सर्वर-साइड hooks Git सर्वर पर चलते हैं।

Hooks आपकी विकास प्रक्रिया को बेहतर बनाने और बग्स को जल्दी पहचानने में मदद करते हैं।

त्वरित संदर्भ

Hooks स्थान

रिपॉजिटरी में hooks

.git/hooks/

Hook सक्षम करें

नमूने से सक्षम करें

mv file.sample file

अनुमतियाँ

स्क्रिप्ट को निष्पादन योग्य बनाएं

chmod +x hookname

कस्टम स्क्रिप्ट

कोई भी स्क्रिप्ट एक hook हो सकती है

#!/bin/sh
echo "Custom hook"
[file content end]